3.1 机器学习基础
🎯 学习目标
通过鸢尾花分类器项目,掌握机器学习的基本概念和流程,包括:
- 理解机器学习的基本概念和分类
- 学会加载和探索数据集
- 掌握数据划分的方法
- 学会训练和评估分类模型
- 理解决策树算法的原理
📋 项目预览
我们将创建一个鸢尾花分类器,能够根据花的特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)自动识别花的种类(山鸢尾、变色鸢尾、维吉尼亚鸢尾)。
🧠 核心概念详解
1. 什么是机器学习?
机器学习就像教电脑学习识别模式,而不是直接告诉它答案。
生活化比喻:
- 传统编程:你告诉电脑"如果花萼长度>5cm且花瓣长度>3cm,就是山鸢尾"
- 机器学习:你给电脑看很多花的照片和标签,让它自己总结规律
机器学习三要素:
- 数据 - 学习的材料
- 模型 - 学习的方法
- 评估 - 检验学习效果
2. 机器学习的分类
| 类型 | 特点 | 例子 |
|---|---|---|
| 监督学习 | 有标签数据 | 分类、回归 |
| 无监督学习 | 无标签数据 | 聚类、降维 |
| 强化学习 | 通过奖励学习 | 游戏AI、机器人 |
我们的鸢尾花分类属于监督学习中的分类问题。
3. 数据集的结构
# 特征(Features) - 输入数据
特征 = [花萼长度, 花萼宽度, 花瓣长度, 花瓣宽度]
# 标签(Labels) - 正确答案
标签 = [山鸢尾, 变色鸢尾, 维吉尼亚鸢尾]关键概念:
- 特征:描述事物的属性(如花的尺寸)
- 标签:我们要预测的目标(如花的种类)
- 样本:一个完整的数据点(如一朵花的所有信息)
4. 训练集和测试集
为什么要划分数据?
- 训练集:用来教模型(就像学生的练习题)
- 测试集:用来考模型(就像期末考试)
生活化比喻:
- 如果只用练习题考试,学生可能只是背答案
- 用新题目考试,才能看出真正学会了多少
# 数据划分示例
训练集:120朵花(80%)
测试集:30朵花(20%)5. 决策树算法
决策树就像做选择题的流程图:
花萼长度 > 5.5cm?
├── 是 → 花瓣宽度 > 1.8cm?
│ ├── 是 → 维吉尼亚鸢尾
│ └── 否 → 变色鸢尾
└── 否 → 山鸢尾决策树的特点:
- ✅ 容易理解:规则清晰可见
- ✅ 无需数据预处理:对数据要求低
- ❌ 容易过拟合:可能记住太多细节
6. 模型评估指标
准确率(Accuracy):
准确率 = 正确预测的数量 / 总预测数量分类报告(Classification Report):
- 精确率:预测为正的样本中真正为正的比例
- 召回率:实际为正的样本中被正确预测的比例
- F1分数:精确率和召回率的调和平均
🔧 代码实现详解
1. 数据加载和探索
from sklearn.datasets import load_iris
# 加载数据集
iris = load_iris()
# 查看数据集信息
print("特征名称:", iris.feature_names)
print("类别名称:", iris.target_names)
print("数据形状:", iris.data.shape)代码说明:
load_iris():加载经典的鸢尾花数据集feature_names:特征名称列表target_names:类别名称列表data.shape:数据的维度(样本数×特征数)
2. 数据划分
from sklearn.model_selection import train_test_split
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
iris.data, iris.target, test_size=0.3, random_state=42
)参数说明:
test_size=0.3:测试集占30%random_state=42:随机种子,确保每次划分结果相同X_train, y_train:训练特征和标签X_test, y_test:测试特征和标签
3. 模型训练
from sklearn.tree import DecisionTreeClassifier
# 创建决策树模型
clf = DecisionTreeClassifier(max_depth=3, random_state=42)
# 训练模型
clf.fit(X_train, y_train)参数说明:
max_depth=3:限制树的最大深度,防止过拟合random_state=42:确保结果可重现fit():用训练数据训练模型
4. 模型预测和评估
from sklearn.metrics import accuracy_score, classification_report
# 预测测试集
y_pred = clf.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)
# 详细分类报告
print(classification_report(y_test, y_pred, target_names=iris.target_names))5. 模型应用
# 预测新样本
new_flower = [[5.1, 3.5, 1.4, 0.2]] # 花萼长5.1, 宽3.5, 花瓣长1.4, 宽0.2
prediction = clf.predict(new_flower)
probability = clf.predict_proba(new_flower)
print("预测类别:", iris.target_names[prediction[0]])
print("各类别概率:", probability)📊 完整代码解析
让我们逐行分析 3.1_鸢尾花分类器.py 的关键代码:
数据加载部分
iris = load_iris()
print(f"特征数量: {len(iris.feature_names)}")- 加载数据集并显示基本信息
- 帮助理解数据的结构和规模
数据划分部分
X_train, X_test, y_train, y_test = train_test_split(
iris.data, iris.target, test_size=0.3, random_state=42
)- 将数据分为训练集和测试集
- 确保每次运行结果一致
模型训练部分
clf = DecisionTreeClassifier(max_depth=3, random_state=42)
clf.fit(X_train, y_train)- 创建决策树模型
- 用训练数据训练模型
预测评估部分
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)- 用测试集进行预测
- 计算预测准确率
可视化部分
plot_tree(clf, feature_names=iris.feature_names, class_names=iris.target_names)- 生成决策树的可视化图形
- 直观展示分类规则
🎯 学习要点总结
- 机器学习概念:理解监督学习、无监督学习、强化学习的区别
- 数据集结构:掌握特征、标签、样本的概念
- 数据划分:理解训练集和测试集的作用
- 决策树算法:了解决策树的工作原理和优缺点
- 模型评估:掌握准确率、精确率、召回率等指标
- 模型应用:学会用训练好的模型进行预测
- 可视化:学会生成和理解模型的可视化结果
- 参数调优:了解模型参数对性能的影响
💡 练习建议
基础练习
- 修改max_depth参数:尝试不同的树深度,观察对准确率的影响
- 调整测试集比例:改变test_size参数,观察划分比例的影响
- 添加更多评估指标:计算混淆矩阵和F1分数
进阶练习
- 尝试其他算法:用KNN或逻辑回归实现相同的分类任务
- 特征重要性分析:分析哪些特征对分类最重要
- 交叉验证:使用交叉验证获得更稳定的评估结果
扩展练习
- 在其他数据集上应用:尝试在乳腺癌数据集或葡萄酒数据集上应用
- 模型部署:创建一个简单的Web界面进行在线预测
- 性能优化:尝试优化模型参数以获得更好的性能
🚀 下一步学习
完成本项目后,你已经掌握了机器学习的基本流程。接下来可以:
- 学习线性回归解决预测问题(3.2房价预测器)
- 学习KNN算法解决图像分类问题(3.3手写数字识别器)
- 深入了解决策树的变种,如随机森林和梯度提升树
记住:机器学习最重要的是理解数据、选择合适的算法、正确评估模型效果!